var 手机号 = ''

var 验证码请求地址 = ''

var 姓名 = ''

var 身份证号码 = ''

// 后台接口开始

var 服务端请求地址 = 'http://192.168.0.107:18115'

// 用户选择了哪一个公司

var companyNameList = ['MY', 'YS-1', 'LYCS', 'LLQM', 'YLBL', 'NX', 'BB', 'SZ', 'ZXJT', 'MP4.0', 'MY02', 'SZ02', 'ELM']

var companyIDList = ['226', '228', '229', '230', '231', '232', '233', '234', '236', '237', '239', '240', '241']

var selectedNum = dialogs.singleChoice("请选择公司", companyNameList, 0);
toast("选择了第" + (selectedNum + 1) + "个选项");

log("选择的公司ID是-" + companyIDList[selectedNum])

var 选择的公司ID = companyIDList[selectedNum]

log('接着后续的操作')

function 获取用户信息FUN() {
    var 获取用户信息 = http.postJson(服务端请求地址 + '/getUserInfo', {
        'companyId': 选择的公司ID
    })

    log(获取用户信息)

    log('获取用户信息的状态码' + 获取用户信息.statusCode)

    var 获取用户信息JSON = 获取用户信息.body.json()

    log(获取用户信息JSON)

    if (获取用户信息.statusCode == 200 && 获取用户信息JSON.statusCode == '0000') {

        log('成功了')

        // 成功
        手机号 = 获取用户信息JSON.data.mobile
        验证码请求地址 = 获取用户信息JSON.data.token
        姓名 = 获取用户信息JSON.data.userName
        身份证号码 = 获取用户信息JSON.data.idCard

        log('手机号-' + 手机号)
        log('验证码请求地址-' + 验证码请求地址)
        log('姓名-' + 姓名)
        log('身份证号码-' + 身份证号码)
    } else {
        // 失败
        exit()
    }
}

function 获取用户正面照FUN() {
    var 获取用户正面照 = http.postJson(服务端请求地址 + '/getIDCard', {
        'companyId': 选择的公司ID,
        'idNumber': 身份证号码,
        'type': '0'
    })
    log(获取用户正面照)

    log('获取用户正面照的状态码' + 获取用户正面照.statusCode)

    if (获取用户正面照.statusCode == 200) {

        log('获取正面照成功了')

    } else {
        // 失败
        exit()
    }
}

function 获取用户背面照FUN() {
    var 获取用户背面照 = http.postJson(服务端请求地址 + '/getIDCard', {
        'companyId': 选择的公司ID,
        'idNumber': 身份证号码,
        'type': '1'
    })
    log(获取用户背面照)

    log('获取用户背面照的状态码' + 获取用户背面照.statusCode)

    if (获取用户背面照.statusCode == 200) {

        log('获取背面照成功了')

    } else {
        // 失败
        exit()
    }
}

function 获取登录二维码FUN() {
    var 获取登录二维码 = http.postJson(服务端请求地址 + '/getQRcode', {
        'companyId': 选择的公司ID
    })
    log(获取登录二维码)

    log('获取登录二维码的状态码' + 获取登录二维码.statusCode)

    if (获取登录二维码.statusCode == 200) {

        log('获取登录二维码成功了')

    } else {
        // 失败
        exit()
    }
}

// 后台接口结束

function 安装分身FUN() {
    home()

    sleep(1000)

    // 利用系统能力点击
    launchApp('小X分身')

    // 利用坐标点击
    // var 分身软件 = text('小X分身').findOne()
    // var 分身软件X = 分身软件.bounds().centerX()
    // var 分身软件Y = 分身软件.bounds().centerY()
    // click(分身软件X, 分身软件Y)

    // 点击制作分身
    id('com.bly.dkplat:id/iv_btn_yjjs').waitFor()

    id('com.bly.dkplat:id/iv_btn_create').findOne().click()

    // 选择企业微信
    text('企业微信').findOne().parent().parent().findOne(text('制作分身')).click()

    // 点击开始制作
    text('开始制作').waitFor()
    id('com.bly.dkplat:id/tv_create').text('开始制作').click()

    // 等待制作完成
    id('com.miui.packageinstaller:id/second_button').waitFor()

    sleep(6000)

    log('安装分身')

    // 点击安装
    id('com.miui.packageinstaller:id/first_button').click()

    sleep(1000)

    // 需要进一步确认按钮
    var 进一步确认安装 = id('com.miui.packageinstaller:id/install_btn').text('安装').findOne(3000)

    if (进一步确认安装) {
        进一步确认安装.click()
    }

    log('安装完成')

    // 安装完成
    id('com.miui.packageinstaller:id/start_button').waitFor()

    sleep(2000)
}

function 卸载分身FUN() {
    // 卸载这个企微分身
    home()

    // 利用系统能力点击
    launchApp('小X分身')

    id('com.bly.dkplat:id/iv_btn_yjjs').waitFor()

    sleep(1000)

    var 卸载分身坐标 = id('com.bly.dkplat:id/tv_name').text('企业微信分身').findOne()
    var 卸载分身坐标X = 卸载分身坐标.bounds().centerX()
    var 卸载分身坐标Y = 卸载分身坐标.bounds().centerY()
    click(卸载分身坐标X, 卸载分身坐标Y)

    // 点击卸载按钮

    textContains("分身管理").waitFor()

    sleep(1000)

    id('com.bly.dkplat:id/tv_btn_del').text('卸载').findOne().click()

    textContains("要卸载此应用吗").waitFor()

    // 确认删除
    id('com.miui.packageinstaller:id/continue_button').text('确定').findOne().click()

    // 卸载成功
    textContains("卸载成功").waitFor()

    id('com.miui.packageinstaller:id/ok_button').text('确定').findOne().click()
}

function 扫一扫FUN() {
    id('com.tencent.wework:id/g68').textContains("工作台").waitFor()

    // 开始微信的扫码登录
    // 点击右上角

    click(1008, 136)

    var 是否出现了扫一扫的图标 = id('com.tencent.wework:id/g68').text('扫一扫').findOne(3000)

    if (是否出现了扫一扫的图标) {

    } else {
        click(1008, 136)

        id('com.tencent.wework:id/g68').text('扫一扫').waitFor()
    }

    // 点击扫一扫
    id('com.tencent.wework:id/g68').text('扫一扫').findOne().parent().click()

    textContains("Windows 企业微信登录确认").waitFor()

    sleep(1000)

    id('com.tencent.wework:id/g1b').text('登录').click()

    sleep(1000)
}

function 登录获取验证码FUN() {
    // 打开分身
    id('com.miui.packageinstaller:id/end_button').click()

    // 允许分身的权限
    id('com.lbe.security.miui:id/permission_allow_button').waitFor()

    sleep(1000)

    id('com.lbe.security.miui:id/permission_allow_button').click()

    // 分身的初始化
    text('隐私保护指引').waitFor()

    id('com.tencent.wework:id/cgo').text('同意').click()

    // 首先判断用户协议是否勾选，如果已经勾选则直接进入下一步，反之亦然

    var 用户协议勾选框 = id('com.tencent.wework:id/mz').findOne()

    var 用户勾选协议状态 = 用户协议勾选框.selected()

    log('用户是否勾选了用户协议-' + 用户勾选协议状态)

    if (用户勾选协议状态 == false) {
        // 没有勾选则勾选即可
        用户协议勾选框.click()
        sleep(1000)
    }

    click('手机号登录')

    // 当屏幕出现下一步按钮的时候进行操作

    textContains("下一步").waitFor();
    // 首先判断是否已经勾选了美国区号

    var 已选择区号 = id('com.tencent.wework:id/cb4').findOne().text()

    if (已选择区号 == '+1') {
        // 直接输入手机号
    } else {
        // 去选择美国的区号
        var 手机区号下拉框 = id('com.tencent.wework:id/caw').findOne()
        手机区号下拉框.click()
        textContains("选择国家和地区").waitFor();
        // 点击右上角的搜索图标
        var 区号搜索按钮 = id('com.tencent.wework:id/kp2').depth('7').findOne()
        var 区号搜索按钮X = 区号搜索按钮.bounds().centerX()
        var 区号搜索按钮Y = 区号搜索按钮.bounds().centerY()
        click(区号搜索按钮X, 区号搜索按钮Y)
        sleep(1000)
        // 输入美国
        setText('美国')
        sleep(1000)
        // 点击美国
        var 美国区号 = id('com.tencent.wework:id/cb4').depth('9').text('美国').findOne()
        var 美国区号X = 美国区号.bounds().centerX()
        var 美国区号Y = 美国区号.bounds().centerY()
        click(美国区号X, 美国区号Y)
        sleep(1000)
    }

    setText(手机号)
    sleep(1000)

    click('下一步')

    text('请输入验证码').waitFor()

    console.log('请输入验证码')

    sleep(3000)
}

function 获取验证码FUN() {
    var 手机号验证码响应 = http.get(验证码请求地址)

    log(手机号验证码响应)

    var 手机号验证码 = 手机号验证码响应.body.json().message

    return 手机号验证码
}

function 登录选择地区FUN() {
    // 判断是否需要设备验证
    var 是否需要设备验证 = text('你正在使用新设备登录企业微信，为保障帐号安全，请选择一种验证方式，以确保是本人操作').findOne(3000)
    if (是否需要设备验证) {
        log('你需要设备认证哦')
        // 卸载分身
        卸载分身FUN()

        // 重头来过
        核心递归FUN()
        // 执行卸载方法，重新来过
    }
    log('开始选择地区')
    // 选择账号所属的地区
    var 选择账号所在的地区 = id('com.tencent.wework:id/cb0').depth('7').findOne()
    选择账号所在的地区.click()
    sleep(1000)
    // 点击右上角的搜索图标
    textContains("选择国家和地区").waitFor();
    var 国家搜索的图标 = id('com.tencent.wework:id/kp2').depth('7').findOne()
    log('打印一下国家搜索的图标信息-' + 国家搜索的图标.bounds())
    var 国家搜索的图标X = 国家搜索的图标.bounds().centerX()
    var 国家搜索的图标Y = 国家搜索的图标.bounds().centerY()
    click(国家搜索的图标X, 国家搜索的图标Y)
    sleep(1000)
    // 输入中国
    setText('中国')
    sleep(2000)
    // 点击中国
    var 选择中国 = id('com.tencent.wework:id/cb1').depth('9').text('+86').findOne()
    var 选择中国X = 选择中国.bounds().centerX()
    var 选择中国Y = 选择中国.bounds().centerY()
    click(选择中国X, 选择中国Y)
    sleep(1000)

    textContains("选择地区").waitFor();

    sleep(1000)

    click('下一步')

    textContains("腾讯企业微信软件许可及服务协议").waitFor();

    sleep(10000)

    click('同意')

    textContains("隐私政策").waitFor();

    sleep(10000)

    click('同意')

    textContains("进入").waitFor();

    sleep(1000)

    click('进入')
}

function 活体检测操作前FUN() {
    // 等待首页加载完成
    textContains("工作台").waitFor();

    var 个人设置 = className('android.widget.RelativeLayout').depth('11').findOne()
    var 个人设置X = 个人设置.bounds().centerX()
    var 个人设置Y = 个人设置.bounds().centerY()
    click(个人设置X, 个人设置Y)

    sleep(1000)

    // 等待帮助按钮的出现
    textContains("加入其他企业").waitFor()

    // 点击个人头像按钮
    id('com.tencent.wework:id/lig').depth('9').findOne().click()

    sleep(1000)

    textContains("红包").waitFor()

    sleep(1000)

    // 继续点击头像
    id('com.tencent.wework:id/k1j').depth('13').findOne().click()

    textContains("对外信息显示").waitFor()

    sleep(1000)

    // 点击姓名
    id('com.tencent.wework:id/gtf').depth('11').findOne().click()
}

function 活体检测操作中FUN() {
    // 点击实名认证
    id('com.tencent.wework:id/gtf').depth('6').findOne().click()
    // 输入姓名
    textContains("填写真实姓名").waitFor()

    sleep(1000)
    setText(姓名)
    sleep(1000)
    click('认证')

    textContains("需提交姓名、身份证号以确定实名信息").waitFor()
    id('com.tencent.wework:id/bay').depth('7').findOne().setText(身份证号码)
    sleep(2000)
    click('同意并下一步')

    textContains("将通过人脸识别验证你的身份信息，请确保是本人操作").waitFor()
    log('权限操作完成，下面开始活体检测')

    // 同意人脸识别的协议
    id('com.tencent.wework:id/ben').depth('7').findOne().click()
    sleep(1000)
    click('下一步')

    // 下一步则直接进入活体检测
    // 这里会提示权限，统一做拒绝处理
    textContains('拍摄照片和录制视频').waitFor()

    // 点击拒绝

    sleep(1000)

    id('com.lbe.security.miui:id/permission_deny_button').text('拒绝').click()

    textContains('进行通话录音或本地录音').waitFor()

    // 点击拒绝

    sleep(1000)

    id('com.lbe.security.miui:id/permission_deny_button').text('拒绝').click()

    // 点击开始
    textContains("开始").waitFor()

    sleep(1000)

    click('开始')
}

function 实名认证失败后重复执行FUN() {
    // 调用后台接口获取身份证正面照开始
    获取用户正面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证正面照结束

    // 点击拍照，拍正面照
    id('com.tencent.wework:id/djk').text('重拍').depth('12').findOne().click()

    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    id('com.tencent.wework:id/awn').depth('8').findOne().click()

    textContains('人脸实名认证失败').waitFor()

    sleep(1000)

    // 调用后台接口获取身份证背面照开始
    获取用户背面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证背面照结束

    // 拍反面照
    id('com.tencent.wework:id/djk').depth('12').text('重拍').find()[1].click()
    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    id('com.tencent.wework:id/awn').depth('8').findOne().click()

    // 等待提交按钮出现
    textContains("提交").waitFor()
    sleep(5000)
    click('提交')
}

function 提交身份证照片FUN() {
    textContains('人脸实名认证失败').waitFor()

    home()

    sleep(1000)

    // 打开企微分身的权限设置
    app.openAppSetting(app.getPackageName('企业微信分身'))

    text('应用信息').waitFor()

    sleep(1000)

    // 点击权限管理
    id('com.miui.securitycenter:id/am_detail_perm').findOne().click()

    text('企业微信分身').waitFor()

    sleep(1000)

    // 开启相机
    text('拍摄照片和录制视频').findOne().parent().parent().click()

    sleep(1000)

    id('com.miui.securitycenter:id/dialog_permission_name').text('相机').waitFor()

    sleep(1000)

    // 设置相机权限为使用时允许
    id('com.miui.securitycenter:id/select_foreground').depth('11').findOne().click()

    sleep(1000)

    // 重新回到企微分身
    launchApp('企业微信分身')

    textContains('人脸实名认证失败').waitFor()

    sleep(1000)

    // 调用后台接口获取身份证正面照开始
    获取用户正面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证正面照结束

    // 点击拍照，拍正面照
    id('com.tencent.wework:id/djk').text('拍照').depth('12').findOne().click()

    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    id('com.tencent.wework:id/awn').depth('8').findOne().click()

    textContains('人脸实名认证失败').waitFor()

    sleep(1000)

    // 调用后台接口获取身份证背面照开始
    获取用户背面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证背面照结束

    // 拍反面照
    id('com.tencent.wework:id/djk').depth('12').text('拍照').findOne().click()
    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    id('com.tencent.wework:id/awn').depth('8').findOne().click()

    // 等待提交按钮出现
    textContains("提交").waitFor()
    sleep(5000)
    click('提交')
}

function 认证成功FUN() {
    // 认证完之后，重新回到首页
    textContains("港澳台及海外用户认证").waitFor()

    sleep(1000)

    back();

    id('com.tencent.wework:id/gtf').findOne()

    var 身份认证AUTH = id('com.tencent.wework:id/gtf').depth('6').findOne()
    var 身份认证AUTHX = 身份认证AUTH.bounds().centerX()
    var 身份认证AUTHY = 身份认证AUTH.bounds().centerY()
    click(身份认证AUTHX, 身份认证AUTHY)

    var 完成认证 = id('com.tencent.wework:id/bvd').findOne(3000)

    if (完成认证) {
        back()

        sleep(1000)

        textContains("对外信息显示").waitFor()

        back()

        sleep(1000)

        textContains("红包").waitFor()

        back()

        sleep(1000)

        textContains("全新创建企业").waitFor()

        back()

        sleep(1000)

        textContains("工作台").waitFor()

        log('回到了首页')
    } else {
        log('认证失败，请做异常处理')
        exit()
    }
}

function 设置别名FUN() {
    // 等待首页加载完成
    textContains("工作台").waitFor();

    var 个人设置 = className('android.widget.RelativeLayout').depth('11').findOne()
    var 个人设置X = 个人设置.bounds().centerX()
    var 个人设置Y = 个人设置.bounds().centerY()
    click(个人设置X, 个人设置Y)

    sleep(1000)

    // 等待帮助按钮的出现
    textContains("加入其他企业").waitFor()

    // 点击个人头像按钮
    id('com.tencent.wework:id/lig').depth('9').findOne().click()

    sleep(1000)

    textContains("红包").waitFor()

    sleep(1000)

    // 继续点击头像
    id('com.tencent.wework:id/k1j').depth('13').findOne().click()

    textContains("对外信息显示").waitFor()

    sleep(1000)

    // 点击对外设置别名
    id('com.tencent.wework:id/gta').depth('11').findOne().click()

    textContains("以下信息将对外部联系人显示").waitFor()

    sleep(1000)

    // 点击姓名

    id('com.tencent.wework:id/k52').depth('8').findOne().click()

    // 点击别名
    textContains("别名").waitFor()

    sleep(1000)

    id('com.tencent.wework:id/h4f').depth('6').findOne().click()

    sleep(1000)

    back()

    textContains("以下信息将对外部联系人显示").waitFor()

    sleep(1000)

    back()

    textContains("对外信息显示").waitFor()

    sleep(1000)

    back()

    textContains("红包").waitFor()

    sleep(1000)

    back()

    textContains("加入其他企业").waitFor()

    sleep(1000)

    back()

}


// 开始执行main方法
function 核心递归FUN() {
    获取用户信息FUN()

    sleep(1000)

    // 开始安装分身
    安装分身FUN()

    // 登录获取验证码
    登录获取验证码FUN()

    var 获取验证码FUN的响应 = 获取验证码FUN()

    log('打印真实验证码')
    log(获取验证码FUN的响应.substring(0, 6))

    var 手机号验证码真实值 = 获取验证码FUN的响应.substring(0, 6)

    if (!手机号验证码真实值) {
        log('收不到短信验证码，请做进一步处理！')
        // exit()
        // 卸载分身
        卸载分身FUN()

        // 重头来过
        核心递归FUN()
    }

    setText(手机号验证码真实值)

    sleep(1000)

    click('下一步')

    sleep(1000)

    // 检查是否弹窗报错
    var 验证码报错弹窗 = id('com.tencent.wework:id/cgp').depth('5').text('确定').findOne(3000)

    if (验证码报错弹窗) {
        click('确定')
        sleep(1000)
        log('验证码验证报错了，请做进一步处理！')
        // exit()
        // 卸载分身
        卸载分身FUN()

        // 重头来过
        核心递归FUN()
    }

    sleep(1000)

    var 是否已经选择过地区 = text('进入').findOne(3000)

    if (是否已经选择过地区) {
        click('进入')
    } else {
        登录选择地区FUN()
    }

    // 进入到企业微信首页

    活体检测操作前FUN()

    // 检测是否完成了实名认证
    var 是否完成了实名认证 = textContains('未认证').findOne(3000)
    if (是否完成了实名认证) {
        活体检测操作中FUN()
        // 提交身份证照片
        提交身份证照片FUN()

        // 实名认证失败
        var 实名认证失败ERR = id('com.tencent.wework:id/cg8').depth('4').findOne(5000)

        if (实名认证失败ERR) {
            // 实名认证失败
            log('实名认证失败')

            sleep(1000)

            id('com.tencent.wework:id/cgp').text('确定').findOne().click()

            // 再来一遍拍照
            实名认证失败后重复执行FUN()

            // 两次失败，则不管了
            var 实名认证失败ERR2 = id('com.tencent.wework:id/cg8').depth('4').findOne(5000)

            if (实名认证失败ERR2) {
                log('实名认证失败')

                sleep(1000)

                id('com.tencent.wework:id/cgp').text('确定').findOne().click()

                // 卸载分身
                卸载分身FUN()

                // 重头来过
                核心递归FUN()
            }
        } else {
            log('实名认证成功')
            // 实名成功
            认证成功FUN()

            // 回到了首页
            // 设置对外信息为别名
            设置别名FUN()

            // 开始扫一扫
            获取登录二维码FUN()

            // 调用企微扫一扫
            扫一扫FUN()

            // 卸载分身
            卸载分身FUN()

            // 重头来过
            核心递归FUN()
        }
    } else {
        log('你已经实名，无需再实名')
        // 卸载分身
        卸载分身FUN()

        核心递归FUN()
    }
}

核心递归FUN()